using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DominioSATT;
using RepositorioSATT;

namespace ServiceSATT
{
    public class SedeService : ISedeService, IListadoSedeService
    {
        ISedeRepositorio Repositorio;
        int ISedeService.Agregar(IInterfazSede ui)
        {
            //Instancia del repositorio de Sedes
            Repositorio = new SedeRepositorio();
            //Creo los Value Object necesarios para El Objeto Domicilio
            ILocalidadRepositorio LocalidadRepositorio = new UbicacionRepositorio();
            int IdLocalidad = LocalidadRepositorio.BuscarIDLocalidad(ui.Localidad);
            IPaisRepositorio PaisRepositorio = new UbicacionRepositorio();
            string NombrePais = LocalidadRepositorio.PaisLocalidad(IdLocalidad);
            int IdPais = PaisRepositorio.BuscarIDPais(NombrePais);
            Pais nPais = new Pais(IdPais, NombrePais, true);
            IProvinciaRepositorio ProvRepo = new UbicacionRepositorio();
            string NombreProvincia = LocalidadRepositorio.ProvinciaLocalidad(IdLocalidad);
            int IdProvincia = ProvRepo.BuscarIDProvincia(NombreProvincia);
            Provincia nProvincia = new Provincia(IdProvincia, NombreProvincia, true, nPais);
            Localidad nLocalidad = new Localidad(IdLocalidad, ui.Localidad, true, nProvincia);
            Domicilio nDomicilio = new Domicilio(nPais, nProvincia, nLocalidad, ui.Direccion);
            //Creo el value object Contacto para la Sede
            Contacto nContacto = new Contacto(ui.Telefono, "", ui.Email);
            IClubRepositorio ClubRepo = new ClubRepositorio();
            int IdClub = ClubRepo.ObtenerId(ui.Club);
            Club nClub = ClubRepo.Buscar(IdClub);
            Sede nSede = new Sede(ui.Nombre, nDomicilio, nContacto, nClub, true, ui.Canchas);
            return Repositorio.Agregar(nSede);
        }

        void ISedeService.Actualizar(IInterfazSede ui)
        {
            //Instancia del repositorio de Sedes
            Repositorio = new SedeRepositorio();
            //Creo los Value Object necesarios para El Objeto Domicilio
            ILocalidadRepositorio LocalidadRepositorio = new UbicacionRepositorio();
            int IdLocalidad = LocalidadRepositorio.BuscarIDLocalidad(ui.Localidad);
            IPaisRepositorio PaisRepositorio = new UbicacionRepositorio();
            string NombrePais = LocalidadRepositorio.PaisLocalidad(IdLocalidad);
            int IdPais = PaisRepositorio.BuscarIDPais(NombrePais);
            Pais nPais = new Pais(IdPais, NombrePais, true);
            IProvinciaRepositorio ProvRepo = new UbicacionRepositorio();
            string NombreProvincia = LocalidadRepositorio.ProvinciaLocalidad(IdLocalidad);
            int IdProvincia = ProvRepo.BuscarIDProvincia(NombreProvincia);
            Provincia nProvincia = new Provincia(IdProvincia, NombreProvincia, true , nPais);
            Localidad nLocalidad = new Localidad(IdLocalidad, ui.Localidad, true, nProvincia);
            Domicilio nDomicilio = new Domicilio(nPais, nProvincia, nLocalidad, ui.Direccion);
            //Creo el value object Contacto para la Sede
            Contacto nContacto = new Contacto(ui.Telefono, "", ui.Email);
            IClubRepositorio ClubRepo = new ClubRepositorio();
            int IdClub = ClubRepo.ObtenerId(ui.Club);
            Club nClub = ClubRepo.Buscar(IdClub);
            Sede nSede = new Sede(ui.IdSede, ui.Nombre, nDomicilio, nContacto, nClub, ui.Estado, ui.Canchas);
            Repositorio.Actualizar(nSede);
        }

        #region IListadoSedeService Members

        public void Buscar(IInterfazSede ui)
        {
            ISedeRepositorio repositorio = new SedeRepositorio();
            Sede Objeto = repositorio.Buscar(ui.Nombre);
            ui.IdSede = Objeto.Idsede;
            ui.Nombre = Objeto.Nombre;
            ui.Canchas = Objeto.CantidadCanchas;
            ui.Direccion = Objeto.Domicilio.Direccion;
            ui.Pais = Objeto.Domicilio.Pais.Nombre;
            ui.Provincia = Objeto.Domicilio.Provincia.Nombre;
            ui.Localidad = Objeto.Domicilio.Localidad.Nombre;
            if (Objeto.Contacto.Email != null)
                ui.Email = Objeto.Contacto.Email;
            else
                ui.Email = "No tiene";
            if (Objeto.Contacto.Telefono != null)
                ui.Telefono = Objeto.Contacto.Telefono;
            else
                ui.Telefono = "No tiene";
            ui.Federacion = Objeto.Club.Federacion.Nombre;
            ui.Club = Objeto.Club.Nombre;
            ui.Estado = Objeto.Estado;
        }

        void IListadoSedeService.Listar(IListadoSede ui)
        {
            ISedeRepositorio repositorio = new SedeRepositorio();
            IClubRepositorio ClubRepo = new ClubRepositorio();
            int IdClub = ClubRepo.ObtenerId(ui.Club);
            List<Sede> ListaSedes = repositorio.Listar(IdClub);
            string[][] Lista = new string[ListaSedes.Count][];
            int i = 0;
            foreach (Sede Objeto in ListaSedes)
            {
                Lista[i] = new string[] { Objeto.Nombre, Objeto.Domicilio.Direccion, Objeto.CantidadCanchas.ToString(), Objeto.Estado.ToString()};
                i++;
            }
            ui.Listado = Lista;
        }

        #endregion

        #region ISedeService Members


        public System.Data.DataTable ReporteSede()
        {
            ISedeRepositorio sede = new SedeRepositorio();
            return sede.ReporteSede();
        }

        #endregion
    }
}
